/// @mainpage Marshalling Library
/// @tableofcontents
/// @b Marshalling is a header-only, platform independent library,
/// which makes the implementation of a binary communication
/// protocol to be an easy and relatively quick process. It provides all the necessary
/// types and classes to make the definition of the custom messages, as well as
/// wrapping transport data fields, to be simple declarative statements of type and
/// class definitions. These statements will specify @b WHAT needs to be implemented. 
/// The @b Marshalling library internals handle the **HOW** part.
///
/// The internals of the @b Marshalling library is mostly template classes which use
/// multiple meta-programming techniques. As the result, only the functionality,
/// required by the protocol being developed, gets compiled in, providing the best code size and
/// speed performance possible. The down side is that compilation process may
/// take a significant amount of time and consume a lot of memory.
///
/// The @b Marshalling library allows having <b>single implementation</b> of the binary
/// protocol messages, which can be re-compiled and used for any possible application:
/// bare-metal with constrained resources, Linux based embedded systems, even 
/// independent GUI analysis tools.
///
/// The @b Marshalling library was specifically developed to be used in **embedded** systems
/// including @b bare-metal ones. It doesn't use exceptions and/or RTTI. It also
/// minimises usage of dynamic memory allocation and provides an ability to exclude
/// it altogether if required, which may be needed when developing @b bare-metal
/// embedded systems. 
///
/// @ref page_use_prot is a tutorial on how to use already defined custom binary protocol.
/// If you are about to develop one, it would be beneficial to read it as well
/// in order to get an impression on how the protocol definition code is going to be used.
///
/// @ref page_define_prot is intended for developers that need to implement a library
/// for custom binary protocol, which can be used in any application in the future,
/// including bare-metal one with constrained environment.
///
